﻿/**
 *			时间相关操作
 */
#ifndef OSS_TIME_H_
#define OSS_TIME_H_
#include "ossType.h"

OSS_EXTERN_BEG

//一个月的时间戳
#define OSS_MONTH_STAMP		(30*24*60*60)

/**
 *		系统时间
 */
typedef struct {
	Word    wYear;
	Word	    wMonth;
	Word	    wDayOfWeek;
	Word	    wDay;
	Word    wHour;
	Word	    wMinute;
	Word	    wSecond;
	Word	    wMilliseconds;
} OssTime;


/*
 * Structure used in select() call, taken from the BSD file sys/time.h.
 */
typedef struct OssTimeval_tag {
        Int    iSec;         /* seconds */
		Int    iUsec;        /* and microseconds */
}OssTimeVal,*POssTimeVal;

/**
 *			获取当前运行的毫秒数
 *@return		返回设备开机到当前的毫秒数
 *@author		吴建凰 2015年12月19日
 */
DWord OssGetTickCount();

/**
 *		获取本机时间
 *@lpst			存放本机时间的结构体
 *@return		无
 *@author		吴建凰 2015年12月17日
 */
void OssGetLocalTime(OssTime *lpst);

/**
 *		获取当前时间，0时区的时间
 */
void OssGetCurrentTime(OssTime *lpst);

/**
 *      获取当前时间戳 
 *@return       自Unix 纪元（January 1 1970 00:00:00 GMT）起的当前时间的秒数的函数。
 *@notes        相对时区为0
 */
DWord OssGetTimestamp();

/**
 *      获取当前时间
 *@tv           自Unix 纪元（January 1 1970 00:00:00 GMT）起的时间。
 *@notes        相对时区为0
 */
void OssGetTimeOfDay(OUT OssTimeVal* tv);

/**
 *      设置当前时间
 *@tv           自Unix 纪元（January 1 1970 00:00:00 GMT）起的时间。
 *              相对时区为0
 *@return       成功返回TRUE
 *@             否则返回FALSE
 */
Bool OssSetTimeOfDay(IN OssTimeVal* tv);

/**
 *      将时间戳转换为日期时间
 */
void OssTimestampToDateTime(DWord dwTimestamp,OssTime *ptTime);

/**
 *      将日期转换为时间戳
 *@return   返回转换的时间戳
 */
DWord OssDateTimeToTimestamp(OssTime *ptTime);

/**
 *      获取当前天结束的时间戳
 */
DWord OssGetDayEndTimestamp(OssTime *ptTime);


/**
 *      获取GMT时间
 *@return   返回GMT时间长度
 */
int OssGetGmtTime(char* szGmtTime,int iMax);  

/**
 *      将字符串时间转换为OssTime
 *@pcStrDateTime        字符串时间，格式为2018-09-21 14:31:21
 */
OssTime OssStringToTime(const char* pcStrDateTime);


OSS_EXTERN_END
#endif